package config

import (
	"errors"
	"strings"
)

const (
	// DefaultFormat 定义一个默认的命名风格
	DefaultFormat = "goMaster"
)

// Config 定义命名风格
type Config struct {
	// NamingFormat NamingFormat用于定义生成文件名的命名格式。
	//推荐使用蛇形命名法或驼峰命名法 例如:go_master 或 goMaster
	//甚至可以指定分隔字符，如go#master。在理论上,可以使用任何组合，但前提条件必须满足命名约定
	// Note: NamingFormat is based on snake or camel string
	NamingFormat string `yaml:"namingFormat"`
}

// NewConfig creates an instance for Config
func NewConfig(format string) (*Config, error) {
	if len(format) == 0 {
		format = DefaultFormat
	}
	cfg := &Config{NamingFormat: format}
	err := validate(cfg)
	return cfg, err
}

func validate(cfg *Config) error {
	if len(strings.TrimSpace(cfg.NamingFormat)) == 0 {
		return errors.New("missing namingFormat")
	}
	return nil
}